package xkp.lesson.service;

import xkp.lesson.exception.MyException;
import xkp.lesson.dao.BankAccountDao;
import xkp.lesson.dao.DBConnection;
import xkp.lesson.entity.BankAccountEntity;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * 此处专门放置业务逻辑
 * 增删改查只是数据库操作
 */

/**
 * 此处涉及到多条对数据库的更新动作
 * 所以这种情况必须使用事务
 * 并且想要使用事务，应该保证两条操作是在一个连接下面
 */
public class BankAccountService {
    public void transMoney(String srcName, String descName, double money) throws SQLException {
        Connection connection = DBConnection.getConnection();
        //关闭自动提交,相当于开启事务
        connection.setAutoCommit(false);
        try{
            //创建操作数据库dao
            BankAccountDao bankAccountDao = new BankAccountDao();
            //加钱
            bankAccountDao.updateAccount(
                    connection,descName,new BigDecimal(money));
            //此处大家在减去money之前，要判断余额是否充足
            //应该先查询再判断
            //如果余额不够充足，应该抛出一个自定义异常
            BankAccountEntity srcAccount =
                    bankAccountDao.selectByName(connection,srcName);
            BigDecimal transMoney = new BigDecimal(money);
            if(srcAccount.getAccountMoney().compareTo(transMoney)<0){
                //System.out.println("账户余额不足");
                throw  new MyException("账户余额不足,转账失败");
            }
            //减钱，减之前应该判断账户余额是否足够
            bankAccountDao.updateAccount(
                    connection,srcName,new BigDecimal(-money));
            System.out.println("转账成功");
            connection.commit();
        }catch (Exception e){
            System.out.println(e.getMessage());
            connection.rollback();
        }finally {
            connection.close();
        }
    }
}
